
/*
    647. 回文子串
    用中心拓展法，好用
    优化：for (int i = 0; i < 2 * n - 1; ++i) {
            int l = i / 2, r = i / 2 + i % 2;
         }
 */

public class CountSubstrings {

    int ans = 0;
    public int countSubstrings(String s) {
//        process(0, s, 0);
//        return ans;

        for (int i = 0; i < s.length(); i++) {
            int l = i;
            int r = i;
            while (l > -1 && r < s.length() && s.charAt(l) == s.charAt(r)) {
                ans++;
                l--;
                r++;
            }
        }
        for (int i = 1; i < s.length(); i++) {
            int l = i - 1;
            int r = i;
            while (l > -1 && r < s.length() && s.charAt(l) == s.charAt(r)) {
                ans++;
                l--;
                r++;
            }
        }
        return ans;
    }

    public void process(int i, String s, int count) {
        if (i == s.length()) {
            ans += count;
            return;
        }

        for (int j = i; j < s.length(); j++) {
            String substring = s.substring(i, j + 1);
            if (isVaild(substring)) {
                count++;
            }
        }
        process(i + 1, s, count);
    }

    public boolean isVaild(String s) {
        if (s.length() == 0) return false;
        if (s.equals(new StringBuffer(s).reverse().toString())) return true;
        return false;
    }
}
